#pragma once
#include <string>
#include "SyntaxParser.hpp"
namespace Level5
{
	class CPPSyntaxParser final :
		public SyntaxParser
	{
		/*std::list<SyntaxParser::Token> tokenStack;
		Token GetToken();
		void inline UngetToken(const Token& token)
		{
			tokenStack.push_back(token);
		}
		Token PeekToken();*/
	public:
		enum class CPPVersion
		{
			Zero,
			CPP98,
			CPP11,
			CPP14,
			CPP17,
			CPP20,
			CPP23,
			Max
		};
	private:
		CPPVersion version;
		Environment* env;
	public:
		CPPSyntaxParser();
		void inline SetCPPVersion(CPPVersion version)
		{
			this->version = version;
		}
		virtual std::list<Level4::Node*>* operator()(std::list<Level5::Preprocessor::Token>*)override final;
		virtual ~CPPSyntaxParser()override final;
		/*virtual std::list<Class*>* GetClass();
		virtual std::list<Interface*>* GetInterface();
		virtual std::list<Node*>* GetOperations();*/
	};
}